<template>
  <view class="page">
    <!-- 表单组件 -->
    <mes-form :mesForm="mesFormTop" ref="formTopRef"></mes-form>
    <!-- 扫码添加 -->
    <mes-choose-goods :top="top" type="productions"></mes-choose-goods>
    <!-- 商品 当手动添加商品时-->
    <mes-goods
      @delete="delGoods"
      @edit="editGoods"
      :form="mesGoodsForm"
    ></mes-goods>
    <!-- 备注 -->
    <mes-form :mesForm="remark"></mes-form>
    <!-- 重置 -->
    <mes-button :type="3" :form="buttonFrom"></mes-button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      clerkHasMore: true,
      MandatorHasMore: true,
      clerkForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      mandatorForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      mesGoodsForm: {
        numberUnitField: 'unit_name', //数量单位
        priceField: 'purchase' //单价
      },
      remark: {
        top: 20,
        row: {
          remark: ''
        },
        items: [
          {
            title: '备注',
            slots: {
              field: 'remark',
              type: 'input'
            }
          }
        ]
      },
      top: 20, //扫码添加
      mesFormTop: {
        top: 20,
        row: {
          purchase_time: this.$tools.getCurTime(1),
          work_time: this.$tools.getCurTime(2),
          finish_time: this.$tools.getCurTime(2)
        },
        items: [
          {
            title: '生产计划',
            required: true,
            slots: {
              field: 'plan_code',
              icon: 'arrow'
            },
            rules: [
              {
                type: 'required',
                message: '请选择生产计划单号'
              }
            ],
            tap: () => {
              uni.navigateTo({ url: '/pages/home/productions/choice' })
            }
          },
          {
            title: '生产单号',
            required: true,
            slots: {
              field: 'purchase_code',
              type: 'input'
            },
            rules: [
              {
                type: 'required',
                message: '请输入生产单号'
              }
            ]
          },
          {
            title: '单据日期',
            required: true,
            slots: {
              field: 'purchase_time',
              type: 'date'
            },
            rules: [
              {
                type: 'required',
                message: '请选择单据日期'
              }
            ]
          },
          {
            title: '开工时间',
            required: true,
            slots: {
              field: 'work_time',
              type: 'date',
              date_type: 'datetime'
            },
            rules: [
              {
                type: 'required',
                message: '请选择开工时间'
              }
            ]
          },
          {
            title: '完工时间',
            required: true,
            slots: {
              field: 'finish_time',
              type: 'date',
              date_type: 'datetime'
            },
            rules: [
              {
                type: 'required',
                message: '请选择完工时间'
              }
            ]
          },
          {
            title: '车间',
            slots: {
              field: 'workshop_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging1()
                this.getWorkShop()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getWorkShop(keyword)
                  this.resetPaging1()
                },
                scrolltoupper: () => {
                  if (this.mandatorForm.page > 0) {
                    this.mandatorForm.page--
                  }
                  this.getWorkShop()
                },
                scrolltolower: () => {
                  if (!this.MandatorHasMore) return
                  this.mandatorForm.page++
                  this.getWorkShop()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.workshop_id = item.id
                  this.mesFormTop.row.workshop_name = item.name
                }
              }
            }
          },
          {
            title: '生产工人',
            slots: {
              field: 'work_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging()
                this.getClerk()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getClerk(keyword)
                  this.resetPaging()
                },
                scrolltoupper: () => {
                  if (this.clerkForm.page > 0) {
                    this.clerkForm.page--
                  }
                  this.getClerk()
                },
                scrolltolower: () => {
                  if (!this.clerkHasMore) return
                  this.clerkForm.page++
                  this.getClerk()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.work_id = item.id
                  this.mesFormTop.row.work_name = item.name
                }
              }
            }
          }
        ]
      },
      buttonFrom: {
        leftEvent: () => {
          this.clearData()
        },
        leftText: '重置',
        rightEvent: () => {
          this.saveData()
        },
        rightText: '确定'
      }
    }
  },
  onLoad() {
    this.getWorkShop() //获取车间
    this.getClerk() //获取职员
    this.getCode()
  },
  methods: {
    // 重置分页
    resetPaging1() {
      this.MandatorHasMore = true
      this.mandatorForm.page = 1
	  console.log(this.mesFormTop)
      this.mesFormTop.items[5].slots.select.options = []
    },
    resetPaging() {
      this.clerkHasMore = true
      this.clerkForm.page = 1
      this.mesFormTop.items[6].slots.select.options = []
    },
    //获取商品
    getGoods() {
      if (this.mesFormTop.row.plan_code) {
        this.$api.prod.outsourcing
          .planinfo({
            purchase_code: this.mesFormTop.row.plan_code
          })
          .then((res) => {
            let info_list = []
            if (res.code == 200) {
              res.data.forEach((item) => {
                info_list.push({
                  id: item.id,
                  goods_id: item.goods_id, //商品id
                  unit: item.unit,
                  // 编辑商品用到的（提交参数）
                  // 商品编号（商品详情获取或者通用->商品价格接口获取）
                  goods_code: item.goods_code,
                  //  商品规格型号
                  goods_note: item.goods_note,
                  goods_attr: item.goods_attr, // 商品属性ID(验证需要加)
                  //  商品单位ID（资料->商品获取商品单位列表，用户选择）
                  goods_unit: item.unit_id,
                  stores_id: item.stores_id, //仓库ID
                  allow_stock: item.allow_stock, // 可用库存
                  //  数量（默认为1，用户修改）
                  number: item.number,
                  //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
                  default_unit: item.default_unit,
                  //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
                  basic_nmber: item.basic_nmber,
                  unit_price: item.purchase, //商品单价
                  all_money: item.money || '', //购货金额
                  money: item.money || '',
                  remark: item.remark, //备注
                  batch_id: item.batch_id, //批次ID
                  batch_name: item.batch_name, //批次名称
                  manufacture: item.manufacture, // 生产日期
                  guarantee: item.guarantee, //保质期
                  validity: item.validity, //有效期至
                  serial: item.serial || null, //序列号数组
                  batch:item.batch,//是否开启批次
                  //  商品单价（通用->商品价格获取）
                  purchase: item.purchase,
                  // 编辑商品用到的（展示参数）
                  default_unit_name: item.default_unit_name, //基本单位名称
                  // mes-goods显示中用到的
                  unit_name: item.unit_name, //数量单位
                  goods_image: item.goods_image, //图片
                  goods_name: item.goods_name, //商品名称
                  period_period:item.serial||null//序列号数组
                })
              })
              getApp().globalData.goods.list = info_list
            }
          })
      }
    },
    // 获取车间
    async getWorkShop(keyword) {
      this.mandatorForm.keyword = keyword
      const res = await this.$api.source.workshop.index(this.mandatorForm)
      if (res.code == 200) {
        this.MandatorHasMore = res.data.list.length ? true : false
        this.mesFormTop.items.forEach((item) => {
          if (item.title === '车间') {
            item.slots.select.options = [
              ...item.slots.select.options,
              ...res.data.list
            ]
          }
        })
      }
    },
    //获取职员
    getClerk(keyword) {
      this.clerkForm.keyword = keyword
      this.$api.source.staff_member.index(this.clerkForm).then((res) => {
        if (res.code == 200) {
          this.clerkHasMore = res.data.list.length ? true : false
          this.mesFormTop.items.forEach((item) => {
            if (item.title === '生产工人') {
              item.slots.select.options = [
                ...item.slots.select.options,
                ...res.data.list
              ]
            }
          })
        }
      })
    },

    //获取生产编号
    async getCode() {
      let code = await this.$tools.getCode(32)
      this.mesFormTop.row.purchase_code = code
      console.log('code is', code)
    },
    //删除商品
    delGoods(i) {
      getApp().globalData.goods.list.splice(i, 1)
    },
    //编辑商品
    editGoods(i) {
      let obj = {
        name: 'edit',
        index: i
      }
      obj = JSON.stringify(obj)
      uni.navigateTo({ url: `/pages/home/productions/goods?obj=${obj}` })
    },
    //清空数据
    clearData() {
      ;(this.mesFormTop.row = {
        plan_code: '',
        purchase_code: '',
        purchase_time: '',
        work_time: '',
        finish_time: '',
        workshop_id: 0,
        work_id: '',
        info_list: [], //商品详细数据
        code_type: 1 //单据类型（1：加工单，2：委外加工单）
        // name: "Tom",
      }),
        (this.remark.row = {
          remark: ''
        })
      getApp().globalData.goods.list = []
      this.getCode(32)
      this.mesFormTop.row.purchase_time = this.$tools.getCurTime(1)
      this.mesFormTop.row.work_time = this.$tools.getCurTime(2)
      this.mesFormTop.row.finish_time = this.$tools.getCurTime(2)
    },
    //更新数据
    saveData() {
      this.$refs.formTopRef.validate((valid) => {
        let postForm = {
          code_type: 1,
          plan_code: this.mesFormTop.row.plan_code, //生产计划编号
          purchase_code: this.mesFormTop.row.purchase_code, //单据编号
          purchase_time: this.mesFormTop.row.purchase_time, //单据时间
          work_time: this.mesFormTop.row.work_time, //交货时间
          finish_time: this.mesFormTop.row.finish_time, //完工时间
          workshop_id: this.mesFormTop.row.workshop_id || null, //车间ID
          work_id: this.mesFormTop.row.work_id || null, //生产工人
          remark: this.remark.row.remark || null,
          info_list: []
        }
        let info_list = getApp().globalData.goods.list
        if (info_list && info_list.length > 0) {
          info_list.forEach((item) => {
            postForm.info_list.push({
              // 编辑商品用到的（提交参数）
              // 商品编号（商品详情获取或者通用->商品价格接口获取）
              goods_code: item.goods_code,
              //  商品规格型号
              goods_note: item.goods_note === null,
              //  商品单位ID（资料->商品获取商品单位列表，用户选择）
              goods_unit: item.goods_unit,
              //  数量（默认为1，用户修改）
              number: item.number,
              //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
              default_unit: item.default_unit,
              //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
              basic_nmber: item.basic_nmber,
              //  商品单价（通用->商品价格获取）
              purchase: item.purchase,
              //  金额
              money: item.money || '',
              // 编辑商品用到的（展示参数）
              default_unit_name: item.default_unit_name, //基本单位名称
              // mes-goods显示中用到的
              unit_name: item.unit_name, //数量单位
              goods_image: item.goods_image, //图片
              goods_name: item.goods_name, //商品名称
              remark: item.remark //商品备注
            })
          })
          postForm.info_list = JSON.stringify(postForm.info_list)
        }
        if (valid) {
          if (!info_list.length) {
            return this.$tools.toast('请选择商品')
          }
          this.$api.prod.productions.add(postForm).then((res) => {
            if (res.code == 200) {
              this.$tools.successBack(res.msg)
            }
          })
        }
      })
    }
  }
}
</script>

<style lang="less" scoped>
</style>
